﻿using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using WatiN.Core;
using WatiN.Core.DialogHandlers;
using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;
using System.Data.Linq;
using tea.DB;
using tea.BL;
using Util;

namespace tea.Tests
{
    [TestClass]
    public class 로그인
    {

        [ClassInitialize]
        public static void DB테스트준비(TestContext context)
        {
            DB.사용자삭제("300094");
        }


        public static void 로그인하기(string 아이디, string 비밀번호, IE ie)
        {
            ie.TextField(Find.BySelector("input[type=text]")).Value = 아이디;
            ie.TextField(Find.BySelector("input[type=password]")).Value = 비밀번호;
            ie.Link(Find.BySelector(".btn-primary")).Click(); // 로그인 버튼 클릭
            ie.WaitUntil_AjaxRedirect();
        }

        static void 로그인_입력(string 아이디, string 비밀번호, IE ie)
        {
            if (아이디 != null)
                ie.TextField(Find.BySelector("input[type=text]")).Value = 아이디; // 아이디 입력
            if (비밀번호 != null)
                ie.TextField(Find.BySelector("input[type=password]")).Value = 비밀번호; // 비밀번호 입력
        }

        public static void 로그아웃하기(IE ie)
        {
            ie.Link(Find.ByText("로그아웃")).Click();
        }

        [TestMethod]
        public  void 로그인테스트1()
        {
            IE ie = new IE("http://localhost:6378/Guest/Login?ReturnUrl=%2f");

            // DB에 등록되지 않은 사용자인지 확인
            Assert.IsFalse(DB.사용자_존재하나("300094"));

            // 필수항목 미입력 테스트
            로그인_입력(null, "pw", ie);
            ie.링크누르고메시지확인(".btn-primary", "필수");

            // 사용자 아이디 오류 테스트
            로그인_입력("3000941", "pw", ie);
            ie.링크누르고메시지확인(".btn-primary", tea.BL.Consts.로그인ID오류);

            // 비밀 번호 오류 테스트
            로그인_입력("300094", "pw", ie);
            ie.링크누르고메시지확인(".btn-primary", tea.BL.Consts.비밀번호오류);

            로그인하기("300094", "sepass", ie);
            Assert.IsTrue(ie.Url.Contains("/Bbs/List"));
            로그아웃하기(ie);

            // 로그인 성공 후 DB에 사용자가 등록되었는지 확인
            Assert.IsTrue(DB.사용자_존재하나("300094"));

            // 로컬DB의 비밀번호와 달라도, forest 비밀번호로 로그인 가능한지 확인
            DB.비밀번호변경("300094", "XXXX");
            로그인하기("300094", "sepass", ie);
            로그아웃하기(ie);

            // 로그인 성공 후 DB에 비밀번호 업데이트 되었는지 확인
            로그인하기("300094", "sepass", ie);
            Assert.IsTrue(ie.Url.Contains("/List"));
            로그아웃하기(ie);

            ie.WaitForComplete();
            ie.Dispose();
        }

    }
}
